package org.remote.social;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.bean.*;

import com.sojoys.artifact.exception.AbstractLogicModelException;

/**
 * @author : DengYing
 * @CreateDate : 2017年8月14日 下午3:10:25
 * @Description ：社交服务器
 */
public interface RemoteSocialServer {
	
	/** 登陆服务器启动 */
	void loginServerStart();
	
	/** 游戏服务器启动 */
	void gameServerStart(String gameServerId);
	
	/** 执行存储 */
	void saveDB();

	// *********************************************** 分割线-核心 ***********************************************
	/** 取得一个唯一ID集 */
	public List<Long> getIds();

	/** 取得一批玩家ID段 */
	public int[] getBatchPidPart(int count) throws AbstractLogicModelException;

	// *********************************************** 分割线-玩家 ***********************************************

	/** 创建一个新的玩家信息 */
	public void createPlayerMap(AccountInfo accountInfo,PlayerInfo playerInfo);

	/** 上传玩家更新信息 */
	public void uploadPlayerInfo(int pid,String serverId, Map<Integer, Object> map) throws AbstractLogicModelException;

	/** 取得玩家信息 */
	public PlayerInfo getPlayerInfo(int pid) throws AbstractLogicModelException;

	/** 取得助战角色列表 */
	public Map<Integer, PlayerInfo> getHelpPlayers(int pid, int count, List<Integer> filterPids);

	// *********************************************** 分割线-好友 **********************************************
	/** 取得社交关系 */
	public List<FriendInfo> getFriends(int pid) throws AbstractLogicModelException;

	/** 操作社交关系 */
	public void operate(int pid, List<Integer> targetIds, int type, Map<Object, Object> ext)
			throws AbstractLogicModelException;

	/** 取得推荐好友 */
	public List<PlayerInfo> getRecommendFriends(int pid) throws AbstractLogicModelException;

	// *********************************************** 分割线-聊天 **********************************************
	/** 发送聊天 */
	public void sendChat(SourceChatMsg msg) throws AbstractLogicModelException;

	/** 进入聊天房间 */
	public ChatRoom enterChatRoom(int pid) throws AbstractLogicModelException;

	/** 退出聊天房间 */
	public void exitChatRoom(int pid) throws AbstractLogicModelException;

	/** 跟换聊天房间编号 */
	public ChatRoom changeRoomNumber(int chatRoomId,int pid) throws AbstractLogicModelException;

	// *********************************************** 分割线-商城 **********************************************
	/** 添加-全服限购商品购买记录 */
	public void addCommodityBuyRecord(int commodityId, int num) throws AbstractLogicModelException;


	// *********************************************** 分割线-组队 **********************************************
	/** 组队副本：创建队伍 */
	DungeonTeam createTeam(PlayerInfo playerInfo, int levelCid, boolean matching);

	/** 组队副本：匹配队伍 */
	DungeonTeam matching(PlayerInfo playerInfo, int levelCid);

	boolean invite(PlayerInfo playerInfo, int levelCid);

	// *********************************************** 分割线-拦截 **********************************************

	/**
	 * 领取礼包码礼包
	 */
	GiftCodeDTO gainGiftCode(int pid, String osName, int channelId, String code);

	/**
	 * 获取功能开关
	 */
	List<Integer> getFunctionSwitch(int channelId, int channelAppId);
	// *********************************************** 活动 **********************************************
	
	/** 上传活动状态 */
	void uploadActivityEntryStatus(int activityId,List<Integer> entryIds,int pid,int status);

	String getUid(int pid);

	/** 获取服务器维护状态 */
    int getStatus();

	void rewardFriendPoint(int pid,int helpPlayerId);
}
